package com.todod.base.module.base.service.protocols;

import org.springframework.stereotype.Service;
import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional;

import java.util.*;
import com.todod.base.module.base.controller.admin.protocols.vo.*;
import com.todod.base.module.base.dal.dataobject.protocols.ProtocolsDO;
import com.todod.base.framework.common.pojo.PageResult;
import com.todod.base.framework.common.pojo.PageParam;
import com.todod.base.framework.common.util.object.BeanUtils;

import com.todod.base.module.base.dal.mysql.protocols.ProtocolsMapper;

import static com.todod.base.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.todod.base.module.base.enums.ErrorCodeConstants.*;

/**
 * 协议标准 Service 实现类
 *
 * @author 平台
 */
@Service
@Validated
public class ProtocolsServiceImpl implements ProtocolsService {

    @Resource
    private ProtocolsMapper protocolsMapper;

    @Override
    public Long createProtocols(ProtocolsSaveReqVO createReqVO) {
        // 插入
        ProtocolsDO protocols = BeanUtils.toBean(createReqVO, ProtocolsDO.class);
        protocolsMapper.insert(protocols);
        // 返回
        return protocols.getId();
    }

    @Override
    public void updateProtocols(ProtocolsSaveReqVO updateReqVO) {
        // 校验存在
        validateProtocolsExists(updateReqVO.getId());
        // 更新
        ProtocolsDO updateObj = BeanUtils.toBean(updateReqVO, ProtocolsDO.class);
        protocolsMapper.updateById(updateObj);
    }

    @Override
    public void deleteProtocols(Long id) {
        // 校验存在
        validateProtocolsExists(id);
        // 删除
        protocolsMapper.deleteById(id);
    }

    private void validateProtocolsExists(Long id) {
        if (protocolsMapper.selectById(id) == null) {
            throw exception(PROTOCOLS_NOT_EXISTS);
        }
    }

    @Override
    public ProtocolsDO getProtocols(Long id) {
        return protocolsMapper.selectById(id);
    }

    @Override
    public PageResult<ProtocolsDO> getProtocolsPage(ProtocolsPageReqVO pageReqVO) {
        return protocolsMapper.selectPage(pageReqVO);
    }

}